/*
    Kelompok    2
    Kelas       2
    Anggota :
    1. Yudha Wastu Prawira      / 13509002
    2. Robertus Theodore        / 13509008
    3. Rendy Bambang Junior     / 13509036
    4. Hartono Sulaiman Wijaya  / 13509046
    5. Daniel Prihartoni        / 13509088
    6. Raydhitya Yosep          / 13509092

*/

#ifndef _APP_H
#define _APP_H

#include "Parser.h"
#include "Display.h"
#include "State.h"
#include <stack>

using namespace std;

class App{
	public :
		App();
		~App();

		//inisialisasi aplikasi
		void initialize();
		//update aplikasi, bersihin stack state
		void update();
		//tambah state baru di stack state
		void addState(State*);
		//bila stack kosong, endOfApp true
		bool endOfApp;
		//mengembalikan tampilan pertama dari state teratas
		DisplayInfo getFirstDisplay();
		//memberi delay x detik
		void delay(int);
		//pointer parser input dan output display
		Parser * p_Input;

	private :
		//stack state, yang top itu current state
		stack<State*> stackOfStates;
		Display * p_Display;
		//method remove state untuk bersih2 stack
		void remState();
};

//deklarasi pointer global
extern App* p_App;

#endif
